package cnn.test.service;

import cnn.topfox.service.AdvancedService;
import cnn.user.dao.UserDao;
import cnn.user.entity.UserDTO;
import cnn.user.entity.UserQTO;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 数据校验组件 示例一 示例二 示例三 示例五
 */
@Service
public class CheckData1Service extends AdvancedService<UserDao, UserDTO, UserQTO> {

    @Override
    public void beforeInsertOrUpdate(List<UserDTO> list) {
        //实际情况下, 示例一/二/三 用其中一种即可.

        /**
         * 数据校验组件 示例一
         */
        //多行记录时只执行一句SQL完成检查手机号是否重复, 并抛出异常
        checkData(list)  // 1. list是要检查重复的数据
                // 2.checkData 为TopFox在 SimpleService里面定义的 new 一个 CheckData对象的方法
                .addField("mobile", "手机号")        //自定义 有异常抛出的错误信息的字段的中文标题
                .setWhere(where().ne("mobile","*")) //自定检查的附加条件, 可以不写(手机号为*的值不参与检查)
                .excute();// 生成检查SQL, 并执行, 有结果记录(重复)则抛出异常, 回滚事务


        /**
         * 数据校验组件 示例二
         */
        //多行执行依据SQL, 检查手机号是否重复 并抛出异常
        checkData(list)
                .setFields("mobile")  //这里直接传 字段英文名.  可以是多个字段哦
                .setWhere(where().ne("mobile","*"))
                .excute();
        // 报错信息将会是:  提交数据{mobile}的值{13588330001}不可重复,  这个英文可以由 调用者自己处理(如专职html前端处理/替换为自己想要的中文)


        /**
         * 数据校验组件 示例三
         */
        String errorText = checkData(list)
                .setFields("mobile")
                .setWhere(where().ne("mobile","*"))
                .excute(false);  //参数传入false 就不会抛出异常, 但会返回错误信息, 开发者自己处理
        //errorText 为 返回的错误信息


    }

    /**
     * 数据校验组件 示例五
     */
    @Override
    public void beforeInsertOrUpdate(UserDTO userDTO, String dbState) {
        //从检查传入的手机号 是否有重复
        checkData(userDTO)
                .setFields("mobile")
                .excute();
    }

}